﻿using NP.BPMReportPlatform.Cadre.Dto;
using NP.BPMReportPlatform.Entities.BPM_Business.Cadre;
using NP.BPMReportPlatform.Entities.BPM_Business;
using NP.BPMReportPlatform.Entities.BPM_Platform;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;

namespace NP.BPMReportPlatform.Cadre
{
    /// <summary>
    /// 干部转身接口服务
    /// </summary>
    public interface ICadreService : IApplicationService
    {
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<GetCadreResultOutput>> GetCadreResult(GetCadreResultInput input);

        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<string> SubmitCadre(GetCadreResultOutput input);

        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<MemoryStream> ExportCadreResultAsync(string id);

        /// <summary>
        /// 获取新员工
        /// </summary>
        /// <param name="workNumber"></param>
        /// <returns></returns>
        Task<object> GetUserDetail(string workNumber);

        /// <summary>
        /// 导师辅导记录
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        Task<string> SubmitTeacherRecord(CadreTeacherRecordDto entity);

        /// <summary>
        /// 保存述职总结结果
        /// </summary>
        /// <param name="input">数据</param>
        Task<string> SubmitCadreResult(CadreResultDto input);

        /// <summary>
        /// 获取干部信息
        /// </summary>
        /// <param name="cadreId">干部信息</param>
        /// <returns></returns>
        Task<CadreDetailDto> GetCadreDetail(string cadreId);

        #region 报表
        /// <summary>
        /// 导师辅导计划报表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CadreReportTeacherOutPut>> GetReportTeacher(CadreReportSearchDto input);

        /// <summary>
        /// 转身执行统计表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<List<CadreReportOrgCountOutPut>> GetReportCadreOrgCount(CadreReportSearchDto input);

        /// <summary>
        /// 干部上岗前沟通记录表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CadreReportRecord>> GetReportCadreRecord(CadreReportSearchDto input);

        /// <summary>
        /// 导师辅导记录表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CadreReportTeacherRecord>> GetReportCadreTeacherRecord(CadreReportSearchDto input);

        /// <summary>
        /// 转身述职记录表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CadreReportResult>> GetReportCadreResult(CadreReportSearchDto input);

        /// <summary>
        /// 转身计划总结记录表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<CadreReportProcess>> GetReportProcess(CadreReportSearchDto input);

        #endregion
    }
}